/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP
// This file is generated from clusters-Attributes.h.zapt

#pragma once

#include <app/ConcreteAttributePath.h>
#include <app/data-model/DecodableList.h>
#include <app/data-model/List.h>
#include <app/data-model/Nullable.h>
#include <app/util/basic-types.h>
#include <lib/core/TLV.h>
#include <lib/support/BitMask.h>

#include <clusters/shared/Attributes.h>
#include <clusters/shared/Enums.h>
#include <clusters/shared/Structs.h>

#include <clusters/ColorControl/AttributeIds.h>
#include <clusters/ColorControl/ClusterId.h>
#include <clusters/ColorControl/Enums.h>
#include <clusters/ColorControl/Structs.h>

namespace chip
{
namespace app
{
	namespace Clusters
	{
		namespace ColorControl
		{
			namespace Attributes
			{

				namespace CurrentHue
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::CurrentHue::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace CurrentHue
				namespace CurrentSaturation
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::CurrentSaturation::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace CurrentSaturation
				namespace RemainingTime
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::RemainingTime::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace RemainingTime
				namespace CurrentX
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::CurrentX::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace CurrentX
				namespace CurrentY
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::CurrentY::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace CurrentY
				namespace DriftCompensation
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::ColorControl::DriftCompensationEnum;
						using DecodableType =
							chip::app::Clusters::ColorControl::DriftCompensationEnum;
						using DecodableArgType =
							chip::app::Clusters::ColorControl::DriftCompensationEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::DriftCompensation::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace DriftCompensation
				namespace CompensationText
				{
					struct TypeInfo {
						using Type = chip::CharSpan;
						using DecodableType = chip::CharSpan;
						using DecodableArgType = chip::CharSpan;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::CompensationText::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
						static constexpr size_t MaxLength() { return 254; }
					};
				} // namespace CompensationText
				namespace ColorTemperatureMireds
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorTemperatureMireds::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorTemperatureMireds
				namespace ColorMode
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::ColorControl::ColorModeEnum;
						using DecodableType = chip::app::Clusters::ColorControl::ColorModeEnum;
						using DecodableArgType =
							chip::app::Clusters::ColorControl::ColorModeEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorMode::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorMode
				namespace Options
				{
					struct TypeInfo {
						using Type =
							chip::BitMask<chip::app::Clusters::ColorControl::OptionsBitmap>;
						using DecodableType =
							chip::BitMask<chip::app::Clusters::ColorControl::OptionsBitmap>;
						using DecodableArgType =
							chip::BitMask<chip::app::Clusters::ColorControl::OptionsBitmap>;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Options::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Options
				namespace NumberOfPrimaries
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::NumberOfPrimaries::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace NumberOfPrimaries
				namespace Primary1X
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary1X::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary1X
				namespace Primary1Y
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary1Y::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary1Y
				namespace Primary1Intensity
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary1Intensity::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary1Intensity
				namespace Primary2X
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary2X::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary2X
				namespace Primary2Y
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary2Y::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary2Y
				namespace Primary2Intensity
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary2Intensity::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary2Intensity
				namespace Primary3X
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary3X::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary3X
				namespace Primary3Y
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary3Y::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary3Y
				namespace Primary3Intensity
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary3Intensity::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary3Intensity
				namespace Primary4X
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary4X::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary4X
				namespace Primary4Y
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary4Y::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary4Y
				namespace Primary4Intensity
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary4Intensity::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary4Intensity
				namespace Primary5X
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary5X::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary5X
				namespace Primary5Y
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary5Y::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary5Y
				namespace Primary5Intensity
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary5Intensity::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary5Intensity
				namespace Primary6X
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary6X::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary6X
				namespace Primary6Y
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary6Y::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary6Y
				namespace Primary6Intensity
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::Primary6Intensity::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace Primary6Intensity
				namespace WhitePointX
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::WhitePointX::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace WhitePointX
				namespace WhitePointY
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::WhitePointY::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace WhitePointY
				namespace ColorPointRX
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorPointRX::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorPointRX
				namespace ColorPointRY
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorPointRY::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorPointRY
				namespace ColorPointRIntensity
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorPointRIntensity::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorPointRIntensity
				namespace ColorPointGX
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorPointGX::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorPointGX
				namespace ColorPointGY
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorPointGY::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorPointGY
				namespace ColorPointGIntensity
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorPointGIntensity::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorPointGIntensity
				namespace ColorPointBX
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorPointBX::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorPointBX
				namespace ColorPointBY
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorPointBY::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorPointBY
				namespace ColorPointBIntensity
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint8_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint8_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorPointBIntensity::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorPointBIntensity
				namespace EnhancedCurrentHue
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::EnhancedCurrentHue::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace EnhancedCurrentHue
				namespace EnhancedColorMode
				{
					struct TypeInfo {
						using Type = chip::app::Clusters::ColorControl::EnhancedColorModeEnum;
						using DecodableType =
							chip::app::Clusters::ColorControl::EnhancedColorModeEnum;
						using DecodableArgType =
							chip::app::Clusters::ColorControl::EnhancedColorModeEnum;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::EnhancedColorMode::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace EnhancedColorMode
				namespace ColorLoopActive
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorLoopActive::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorLoopActive
				namespace ColorLoopDirection
				{
					struct TypeInfo {
						using Type = uint8_t;
						using DecodableType = uint8_t;
						using DecodableArgType = uint8_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorLoopDirection::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorLoopDirection
				namespace ColorLoopTime
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorLoopTime::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorLoopTime
				namespace ColorLoopStartEnhancedHue
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorLoopStartEnhancedHue::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorLoopStartEnhancedHue
				namespace ColorLoopStoredEnhancedHue
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorLoopStoredEnhancedHue::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorLoopStoredEnhancedHue
				namespace ColorCapabilities
				{
					struct TypeInfo {
						using Type = chip::BitMask<
							chip::app::Clusters::ColorControl::ColorCapabilitiesBitmap>;
						using DecodableType = chip::BitMask<
							chip::app::Clusters::ColorControl::ColorCapabilitiesBitmap>;
						using DecodableArgType = chip::BitMask<
							chip::app::Clusters::ColorControl::ColorCapabilitiesBitmap>;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorCapabilities::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorCapabilities
				namespace ColorTempPhysicalMinMireds
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorTempPhysicalMinMireds::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorTempPhysicalMinMireds
				namespace ColorTempPhysicalMaxMireds
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::ColorTempPhysicalMaxMireds::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace ColorTempPhysicalMaxMireds
				namespace CoupleColorTempToLevelMinMireds
				{
					struct TypeInfo {
						using Type = uint16_t;
						using DecodableType = uint16_t;
						using DecodableArgType = uint16_t;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::CoupleColorTempToLevelMinMireds::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace CoupleColorTempToLevelMinMireds
				namespace StartUpColorTemperatureMireds
				{
					struct TypeInfo {
						using Type = chip::app::DataModel::Nullable<uint16_t>;
						using DecodableType = chip::app::DataModel::Nullable<uint16_t>;
						using DecodableArgType =
							const chip::app::DataModel::Nullable<uint16_t> &;

						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
						static constexpr AttributeId GetAttributeId()
						{
							return Attributes::StartUpColorTemperatureMireds::Id;
						}
						static constexpr bool MustUseTimedWrite() { return false; }
					};
				} // namespace StartUpColorTemperatureMireds
				namespace GeneratedCommandList
				{
					struct TypeInfo
						: public Clusters::Globals::Attributes::GeneratedCommandList::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
					};
				} // namespace GeneratedCommandList
				namespace AcceptedCommandList
				{
					struct TypeInfo
						: public Clusters::Globals::Attributes::AcceptedCommandList::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
					};
				} // namespace AcceptedCommandList
				namespace AttributeList
				{
					struct TypeInfo
						: public Clusters::Globals::Attributes::AttributeList::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
					};
				} // namespace AttributeList
				namespace FeatureMap
				{
					struct TypeInfo : public Clusters::Globals::Attributes::FeatureMap::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
					};
				} // namespace FeatureMap
				namespace ClusterRevision
				{
					struct TypeInfo
						: public Clusters::Globals::Attributes::ClusterRevision::TypeInfo {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}
					};
				} // namespace ClusterRevision

				struct TypeInfo {
					struct DecodableType {
						static constexpr ClusterId GetClusterId()
						{
							return Clusters::ColorControl::Id;
						}

						CHIP_ERROR Decode(TLV::TLVReader &reader,
								  const ConcreteAttributePath &path);

						Attributes::CurrentHue::TypeInfo::DecodableType currentHue =
							static_cast<uint8_t>(0);
						Attributes::CurrentSaturation::TypeInfo::DecodableType
							currentSaturation = static_cast<uint8_t>(0);
						Attributes::RemainingTime::TypeInfo::DecodableType remainingTime =
							static_cast<uint16_t>(0);
						Attributes::CurrentX::TypeInfo::DecodableType currentX =
							static_cast<uint16_t>(0);
						Attributes::CurrentY::TypeInfo::DecodableType currentY =
							static_cast<uint16_t>(0);
						Attributes::DriftCompensation::TypeInfo::DecodableType
							driftCompensation = static_cast<
								chip::app::Clusters::ColorControl::DriftCompensationEnum>(
								0);
						Attributes::CompensationText::TypeInfo::DecodableType compensationText;
						Attributes::ColorTemperatureMireds::TypeInfo::DecodableType
							colorTemperatureMireds = static_cast<uint16_t>(0);
						Attributes::ColorMode::TypeInfo::DecodableType colorMode =
							static_cast<chip::app::Clusters::ColorControl::ColorModeEnum>(
								0);
						Attributes::Options::TypeInfo::DecodableType options = static_cast<
							chip::BitMask<chip::app::Clusters::ColorControl::OptionsBitmap>>(
							0);
						Attributes::NumberOfPrimaries::TypeInfo::DecodableType numberOfPrimaries;
						Attributes::Primary1X::TypeInfo::DecodableType primary1X =
							static_cast<uint16_t>(0);
						Attributes::Primary1Y::TypeInfo::DecodableType primary1Y =
							static_cast<uint16_t>(0);
						Attributes::Primary1Intensity::TypeInfo::DecodableType primary1Intensity;
						Attributes::Primary2X::TypeInfo::DecodableType primary2X =
							static_cast<uint16_t>(0);
						Attributes::Primary2Y::TypeInfo::DecodableType primary2Y =
							static_cast<uint16_t>(0);
						Attributes::Primary2Intensity::TypeInfo::DecodableType primary2Intensity;
						Attributes::Primary3X::TypeInfo::DecodableType primary3X =
							static_cast<uint16_t>(0);
						Attributes::Primary3Y::TypeInfo::DecodableType primary3Y =
							static_cast<uint16_t>(0);
						Attributes::Primary3Intensity::TypeInfo::DecodableType primary3Intensity;
						Attributes::Primary4X::TypeInfo::DecodableType primary4X =
							static_cast<uint16_t>(0);
						Attributes::Primary4Y::TypeInfo::DecodableType primary4Y =
							static_cast<uint16_t>(0);
						Attributes::Primary4Intensity::TypeInfo::DecodableType primary4Intensity;
						Attributes::Primary5X::TypeInfo::DecodableType primary5X =
							static_cast<uint16_t>(0);
						Attributes::Primary5Y::TypeInfo::DecodableType primary5Y =
							static_cast<uint16_t>(0);
						Attributes::Primary5Intensity::TypeInfo::DecodableType primary5Intensity;
						Attributes::Primary6X::TypeInfo::DecodableType primary6X =
							static_cast<uint16_t>(0);
						Attributes::Primary6Y::TypeInfo::DecodableType primary6Y =
							static_cast<uint16_t>(0);
						Attributes::Primary6Intensity::TypeInfo::DecodableType primary6Intensity;
						Attributes::WhitePointX::TypeInfo::DecodableType whitePointX =
							static_cast<uint16_t>(0);
						Attributes::WhitePointY::TypeInfo::DecodableType whitePointY =
							static_cast<uint16_t>(0);
						Attributes::ColorPointRX::TypeInfo::DecodableType colorPointRX =
							static_cast<uint16_t>(0);
						Attributes::ColorPointRY::TypeInfo::DecodableType colorPointRY =
							static_cast<uint16_t>(0);
						Attributes::ColorPointRIntensity::TypeInfo::DecodableType
							colorPointRIntensity;
						Attributes::ColorPointGX::TypeInfo::DecodableType colorPointGX =
							static_cast<uint16_t>(0);
						Attributes::ColorPointGY::TypeInfo::DecodableType colorPointGY =
							static_cast<uint16_t>(0);
						Attributes::ColorPointGIntensity::TypeInfo::DecodableType
							colorPointGIntensity;
						Attributes::ColorPointBX::TypeInfo::DecodableType colorPointBX =
							static_cast<uint16_t>(0);
						Attributes::ColorPointBY::TypeInfo::DecodableType colorPointBY =
							static_cast<uint16_t>(0);
						Attributes::ColorPointBIntensity::TypeInfo::DecodableType
							colorPointBIntensity;
						Attributes::EnhancedCurrentHue::TypeInfo::DecodableType
							enhancedCurrentHue = static_cast<uint16_t>(0);
						Attributes::EnhancedColorMode::TypeInfo::DecodableType
							enhancedColorMode = static_cast<
								chip::app::Clusters::ColorControl::EnhancedColorModeEnum>(
								0);
						Attributes::ColorLoopActive::TypeInfo::DecodableType colorLoopActive =
							static_cast<uint8_t>(0);
						Attributes::ColorLoopDirection::TypeInfo::DecodableType
							colorLoopDirection = static_cast<uint8_t>(0);
						Attributes::ColorLoopTime::TypeInfo::DecodableType colorLoopTime =
							static_cast<uint16_t>(0);
						Attributes::ColorLoopStartEnhancedHue::TypeInfo::DecodableType
							colorLoopStartEnhancedHue = static_cast<uint16_t>(0);
						Attributes::ColorLoopStoredEnhancedHue::TypeInfo::DecodableType
							colorLoopStoredEnhancedHue = static_cast<uint16_t>(0);
						Attributes::ColorCapabilities::TypeInfo::DecodableType colorCapabilities =
							static_cast<chip::BitMask<chip::app::Clusters::ColorControl::
											  ColorCapabilitiesBitmap>>(0);
						Attributes::ColorTempPhysicalMinMireds::TypeInfo::DecodableType
							colorTempPhysicalMinMireds = static_cast<uint16_t>(0);
						Attributes::ColorTempPhysicalMaxMireds::TypeInfo::DecodableType
							colorTempPhysicalMaxMireds = static_cast<uint16_t>(0);
						Attributes::CoupleColorTempToLevelMinMireds::TypeInfo::DecodableType
							coupleColorTempToLevelMinMireds = static_cast<uint16_t>(0);
						Attributes::StartUpColorTemperatureMireds::TypeInfo::DecodableType
							startUpColorTemperatureMireds;
						Attributes::GeneratedCommandList::TypeInfo::DecodableType
							generatedCommandList;
						Attributes::AcceptedCommandList::TypeInfo::DecodableType
							acceptedCommandList;
						Attributes::AttributeList::TypeInfo::DecodableType attributeList;
						Attributes::FeatureMap::TypeInfo::DecodableType featureMap =
							static_cast<uint32_t>(0);
						Attributes::ClusterRevision::TypeInfo::DecodableType clusterRevision =
							static_cast<uint16_t>(0);
					};
				};
			} // namespace Attributes
		} // namespace ColorControl
	} // namespace Clusters
} // namespace app
} // namespace chip
